Field of the Invention
Embodiments of the present invention generally relate to a method and apparatus for automatic software development for a group of controller-based devices.
Description of the Related Art
The use of field programmable gate arrays (FPGAs) and other controller-based devices (e.g. microcontroller or microprocessor based), such as MCU, SoC, mobile phones, computers, etc. have grown considerably popular. Low manufacturing costs, availability, and customization of controllers have led to a proliferation of microcontrollers and Systems on a Chip (SoC) (e.g., PIC, ARDUINO, RASPBERRY PI and the like) being used by commercial companies and hobbyists alike for creation of devices. Controller-based devices include a processor core and a memory, which are programmable for processing input/output data in communication with peripherals. Program memory in the form of NOR FLASH or OTP ROM is also often included on such controller-based devices, as well as a small amount of random access memory (RAM). Several such controller-based devices are designed for embedded applications within larger devices. Real world applications of such controller-based devices can potentially include connecting controller-based devices with conventional objects or systems as peripherals, thereby enabling digitization, connectivity and even remote control of such peripherals. However, several challenges exist in making such real world applications due to the complexity of combining Cloud technologies with hardware and software technologies
In general, programming controller-based devices or groups thereof is quite complex. As the “Internet of Things (IoT)” grows, more and more such controller-based devices are connected to one another and/or to the Internet, significantly increasing the complexity of programming. In real-world scenarios, such controller-based devices may communicate with one another and/or to a gateway such that the gateway becomes a proxy for the Internet communications for the so-called edge devices. Edge devices may communicate through one or more gateways, or directly as independent devices. Within a group, all the devices (gateway and edge) must be programmed in a compatible manner to facilitate interoperability, which further increases the complexity of programming such devices significantly. Further, managing compatibility every time a customization is implemented may also be excessively time consuming. Programming groups of controller-based devices is very challenging for users as one has to memorize coding commands, understand hierarchies, utilize proper calling syntaxes, and the like. Even if one device is programmed incorrectly, a written program for that or another controller-based device in the group may fail to run, or produce errors.
Thus, there is a need in the art for simplifying programming for controller-based devices, while automatically doing so for a group of controller-based devices.